package SecondeStage.IO.ObjectStream;

import java.io.*;

public class ObjectOutputStream_ {
    public static void main(String[] args) throws IOException {
        // 序列化后，保存的文件格式，不是纯文本，而是按照它的格式来保存
        String filePath ="D:\\Java\\JavaProject\\data.dat";

        ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(filePath));

        // 序列化数据到 D:\Java\JavaProject\data.dat
        oos.writeInt(100); // int -> Integer (实现了 Serializable)
        oos.writeBoolean(true); // boolean ->Boolean(实现了 Serializable)
        oos.writeChar('a'); // char -> Character(实现了 Serializable)
        oos.writeUTF("韩顺平教育"); // String (String 本身就实现了Serializable接口)
        // 保存一个Dog对象
        oos.writeObject(new Dog("大黄",3,"白色","日本"));
    }
}

// 1.如果需要序列化某个类的对象，必须要实现 Serializable接口
class Dog implements Serializable {
    private String name;
    private int age;
    //2.serialVersionUID 序列化的版本号，可以提高兼容性
    private static final long serialVersionUID=1l;
    //3.序列化对象时，static和transient修饰的成员不会被序列化
    private static String nation;
    private transient String color;
    //4.序列化对象时，要求属性的类型也实现了Serializable接口
    //private Master master =new Master(); // 不行
    public Dog(String name, int age, String color,String nation) {
        this.name = name;
        this.age = age;
        this.color = color;
        this.nation =nation;
    }

    @Override
    public String toString() {
        return "Dog{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", nation=" + nation +
                ", color='" + color + '\'' +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
